<

ImageCache 大きな画像

まとめ

maxByteSizeImageCacheもうありません 大きな画像を収容できるように自動的に大きくなります。

コンテクスト

以前は、画像をImageCacheよりも大きいバイトサイズを持っていたImageCachemaxByteSize、 flutterは永続的に増加しましたmaxByteSize価値 それらのイメージに対応するために。 このロジックは肥大化につながることがありましたmaxByteSizeという価値観を メモリが制限されたシステムでの作業がより困難になりました。

変更内容の説明

次の「前」と「後」の擬似コードは、次のことを示しています。 に加えられた変更ImageCacheアルゴリズム:

// Old logic pseudocode
void onLoadImage(Image image) {
  if (image.byteSize > _cache.maxByteSize) {
    _cache.maxByteSize = image.byteSize + 1000;
  }
  _cache.add(image);
  while (_cache.count > _cache.maxCount
      || _cache.byteSize > _cache.maxByteSize) {
    _cache.discardOldestImage();
  }
}
// New logic pseudocode
void onLoadImage(Image image) {
  if (image.byteSize < _cache.maxByteSize) {
    _cache.add(image);
    while (_cache.count > _cache.maxCount
        || _cache.byteSize > cache.maxByteSize) {
      cache.discardOldestImage();
    }
  }
}

移行ガイド

状況が発生する可能性があります。ImageCache以前はなかった新しいロジックでスラッシングしています。 特に、サイズより大きい画像を読み込む場合は、cache.maxByteSize価値。 これは、次のいずれかの方法で解決できます。

  1. 増加ImageCache.maxByteSize価値 より大きな画像に対応するため。
  2. 画像読み込みロジックを調整して、次のことを保証します。 画像はうまく収まりますImageCache.maxByteSizeあなたが選んだ価値観。
  3. サブクラスImageCache、目的のロジックを実装し、 サブクラスに提供する新しいバインディングを作成します のImageCache(を参照してください。image_cache.dartソース)。

タイムライン

古いアルゴリズムはサポートされなくなりました。

リリースされたバージョン: 1.16.3
安定版リリース: 1.17

参考文献

API ドキュメント:

  • ImageCache

関連する問題:

  • 問題 45643

関連する PR:

  • 大きな画像に対応するためのキャッシュ サイズの増加を停止しました

他の:

  • ImageCacheソース